#ifndef XDECODE_TASK_H
#define XDECODE_TASK_H
#include "xdecode.h"
#include "xtools.h"
class XDecodeTask : public XThread {
public:
  /// @brief 打开解码器
  /// @param para
  /// @return
  bool Open(AVCodecParameters *para);
  // 责任链处理函数
  void Do(AVPacket *pkt) override;
  // 线程主函数
  void Main() override;
  // 线程安全，不会直接返回frame_，而是新建一个bin对frame_进行引用计数加一
  // 需要need_view_来控制，调用后会把need_view_ = false
  AVFrame *GetFrame();
private:
  std::mutex mtx_;
  XDecode decode_;
  XAVPacketList pkt_list_;
  AVFrame* frame_ = nullptr;
  bool need_view_ = false;// 是否需要渲染，没帧只能渲染一次
};
#endif